package AccesoADatos;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import Logica.Entidades.Formacion;

public class JugadorDAO {
	
	public List<List<String>> getJugadores(int idEquipo){
		List<List<String>> jugadoresDto = new ArrayList<List<String>>();
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			String consulta = "SELECT * FROM JUGADOR WHERE ID_EQUIPO_PRIMERA = " + idEquipo;
			
			Statement stmt = conn.createStatement();
            ResultSet rset = stmt.executeQuery(consulta);
			
			jugadoresDto = resultSetToString(rset,8);
			
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return jugadoresDto;
	}
	
	public List<List<String>> buscarDtoJugadores(String equipo, String posicion,int rangoInferior,int rangoSuperior){
		List<List<String>> jugadoresDto = new ArrayList<List<String>>();
		
		String consulta = "SELECT J.ID_JUGADOR, J.NOMBRE, J.APELLIDO, J.DORSAL, J.POSICION, J.COTIZACION FROM JUGADOR J, EQUIPOPRIMERA E WHERE J.ID_EQUIPO_PRIMERA = E.ID_EQUIPO";
		
		if(!equipo.equals("Todos"))
			consulta = consulta + " AND E.NOMBRE = '" + equipo + "'";
		
		if(!posicion.equals("Todos"))
			consulta = consulta + " AND J.POSICION = '"+posicion+"'";
		
		if(rangoInferior + rangoSuperior != (-2))
			consulta = consulta + " AND J.COTIZACION BETWEEN " + rangoInferior + " AND " + rangoSuperior;
		
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			
			Statement stmt = conn.createStatement();
            ResultSet rset = stmt.executeQuery(consulta);
			
			jugadoresDto = resultSetToString(rset,7);
			
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return jugadoresDto;
	}
	
	public List<List<String>> buscarDtoTitulares(Formacion f){
		String consulta = "SELECT J.ID_JUGADOR, J.NOMBRE, J.APELLIDO, J.DORSAL, J.POSICION, J.COTIZACION FROM JUGADOR J, JUGADORES_TITULARES JT WHERE J.ID_JUGADOR = JT.ID_JUGADOR_TITULAR AND JT.ID_FORMACION = " + f.getIdFormacion();
		List<List<String>> jugadoresDto = new ArrayList<List<String>>();
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			
			Statement stmt = conn.createStatement();
            ResultSet rset = stmt.executeQuery(consulta);
			
			jugadoresDto = resultSetToString(rset,7);
			
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return jugadoresDto;
	}
	
	public List<List<String>> buscarDtoSuplentes(Formacion f){
		String consulta = "SELECT J.ID_JUGADOR, J.NOMBRE, J.APELLIDO, J.DORSAL, J.POSICION, J.COTIZACION FROM JUGADOR J, JUGADORES_SUPLENTES JS WHERE J.ID_JUGADOR = JS.ID_JUGADOR_SUPLENTE AND JS.ID_FORMACION = " + f.getIdFormacion();
		List<List<String>> jugadoresDto = new ArrayList<List<String>>();
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			
			Statement stmt = conn.createStatement();
            ResultSet rset = stmt.executeQuery(consulta);
			
			jugadoresDto = resultSetToString(rset,7);
			
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return jugadoresDto;
	}
	
	public List<List<String>> resultSetToString(ResultSet r, int columnas) throws SQLException{
		
		List<List<String>> lista = new ArrayList<List<String>>();
		
		while(r.next()){
			
			List<String> temp = new ArrayList<String>();
			
			for(int i = 1 ; i < columnas ; i++){
				temp.add(r.getString(i));
			}
			lista.add(temp);
		}
		return lista;
	}

	public List<List<String>> obtenerJugadoresTitulares(int idFormacionActual) {
			
			List<List<String>> jugadoresDto = new ArrayList<List<String>>();
			try {
				Connection conn = ConexionOracle.getConexionOracle().getConnection();
				String consulta = "SELECT J.* FROM FORMACION F, JUGADORES_TITULARES JT, JUGADOR J WHERE JT.ID_JUGADOR_TITULAR = J.ID_JUGADOR AND F.ID_FORMACION = JT.ID_FORMACION AND JT.ID_FORMACION = " + idFormacionActual;
				
				Statement stmt = conn.createStatement();
	            ResultSet rset = stmt.executeQuery(consulta);
	            
	            jugadoresDto = resultSetToString(rset,7);
				
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			return jugadoresDto;	
		}
		
		public List<List<String>> obtenerJugadoresSuplentes(int idFormacionActual) {
			
			List<List<String>> jugadoresDto = new ArrayList<List<String>>();
			try {
				Connection conn = ConexionOracle.getConexionOracle().getConnection();
				String consulta = "SELECT J.* FROM FORMACION F, JUGADORES_SUPLENTES JS, JUGADOR J WHERE JS.ID_JUGADOR_SUPLENTE = J.ID_JUGADOR AND F.ID_FORMACION = JS.ID_FORMACION AND JS.ID_FORMACION = " + idFormacionActual;
				
				Statement stmt = conn.createStatement();
	            ResultSet rset = stmt.executeQuery(consulta);
	            
	            jugadoresDto = resultSetToString(rset,7);
				
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			return jugadoresDto;
		}
}
